{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "第二步：调整树的参数：max_depth & min_child_weight# 第二步：调整树的参数：max_depth & min_child_weight"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 49352 entries, 0 to 49351\n",
      "Columns: 228 entries, bathrooms to interest_level\n",
      "dtypes: float64(9), int64(219)\n",
      "memory usage: 85.8 MB\n"
     ]
    }
   ],
   "source": [
    "dpath = './data/'\n",
    "dtrain = pd.read_csv(dpath +\"RentListingInquries_FE_train.csv\")\n",
    "dtrain.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y_train = dtrain['interest_level']\n",
    "train = dtrain.drop([\"interest_level\"], axis=1)\n",
    "X_train = np.array(train)\n",
    "\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "第一轮参数调整得到的n_estimators最优值（216），其余参数继续默认值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'reg_alpha': [1.5, 2], 'reg_lambda': [0.5, 1, 2]}\n"
     ]
    }
   ],
   "source": [
    "reg_alpha = [ 1.5, 2]    #default = 0, 测试0.1,1，1.5，2\n",
    "reg_lambda = [0.5, 1, 2]      #default = 1，测试0.1， 0.5， 1，2\n",
    "\n",
    "param_test4_1 = dict(reg_alpha=reg_alpha, reg_lambda=reg_lambda)\n",
    "print(param_test4_1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.58140, std: 0.00365, params: {'reg_alpha': 1.5, 'reg_lambda': 0.5},\n",
       "  mean: -0.58129, std: 0.00346, params: {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       "  mean: -0.58173, std: 0.00334, params: {'reg_alpha': 1.5, 'reg_lambda': 2},\n",
       "  mean: -0.58152, std: 0.00332, params: {'reg_alpha': 2, 'reg_lambda': 0.5},\n",
       "  mean: -0.58191, std: 0.00295, params: {'reg_alpha': 2, 'reg_lambda': 1},\n",
       "  mean: -0.58195, std: 0.00335, params: {'reg_alpha': 2, 'reg_lambda': 2}],\n",
       " {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       " -0.5812945554446877)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb4_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=216,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=6,\n",
    "        min_child_weight=4,\n",
    "        gamma=0,\n",
    "        subsample=0.8,\n",
    "        colsample_bytree=0.6,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3,\n",
    "        nthread=-1)\n",
    "gsearch4_1 = GridSearchCV(xgb4_1, param_grid = param_test4_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold, return_train_score=True)\n",
    "gsearch4_1.fit(X_train , y_train)\n",
    "gsearch4_1.grid_scores_, gsearch4_1.best_params_, gsearch4_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([192.95969748, 197.04541469, 197.00457883, 197.68265448,\n",
       "        185.94953713, 124.71528878]),\n",
       " 'mean_score_time': array([0.58656139, 0.60882025, 0.59763474, 0.57312551, 0.50935516,\n",
       "        0.48629141]),\n",
       " 'mean_test_score': array([-0.58140331, -0.58129456, -0.58173473, -0.58151617, -0.58190751,\n",
       "        -0.58194904]),\n",
       " 'mean_train_score': array([-0.47614332, -0.47789144, -0.48030535, -0.47883171, -0.48017209,\n",
       "        -0.48235888]),\n",
       " 'param_reg_alpha': masked_array(data=[1.5, 1.5, 1.5, 2, 2, 2],\n",
       "              mask=[False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_reg_lambda': masked_array(data=[0.5, 1, 2, 0.5, 1, 2],\n",
       "              mask=[False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'reg_alpha': 1.5, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 2}],\n",
       " 'rank_test_score': array([2, 1, 4, 3, 5, 6]),\n",
       " 'split0_test_score': array([-0.57503373, -0.57544527, -0.57573642, -0.57558934, -0.57703681,\n",
       "        -0.57606072]),\n",
       " 'split0_train_score': array([-0.47674395, -0.47815753, -0.48120355, -0.4796805 , -0.48113722,\n",
       "        -0.48264049]),\n",
       " 'split1_test_score': array([-0.58011475, -0.57993693, -0.58073728, -0.58058552, -0.57997998,\n",
       "        -0.58059816]),\n",
       " 'split1_train_score': array([-0.47579593, -0.47799925, -0.48043045, -0.4784982 , -0.47947955,\n",
       "        -0.48181643]),\n",
       " 'split2_test_score': array([-0.58250561, -0.58179826, -0.58289398, -0.58253094, -0.58357571,\n",
       "        -0.58331108]),\n",
       " 'split2_train_score': array([-0.47576699, -0.47780066, -0.48011453, -0.47798273, -0.48059233,\n",
       "        -0.48237604]),\n",
       " 'split3_test_score': array([-0.58377523, -0.58394969, -0.58411887, -0.58367028, -0.58429858,\n",
       "        -0.5844476 ]),\n",
       " 'split3_train_score': array([-0.47646656, -0.47730755, -0.48036715, -0.47920117, -0.48077931,\n",
       "        -0.48262164]),\n",
       " 'split4_test_score': array([-0.58558851, -0.58534386, -0.58518815, -0.58520591, -0.58464729,\n",
       "        -0.58532866]),\n",
       " 'split4_train_score': array([-0.47594318, -0.4781922 , -0.47941106, -0.47879598, -0.47887204,\n",
       "        -0.48233982]),\n",
       " 'std_fit_time': array([ 0.40773781,  4.24699639,  2.20355569,  2.39023052, 30.34158414,\n",
       "         1.09403248]),\n",
       " 'std_score_time': array([0.02788154, 0.0318553 , 0.04009547, 0.01356558, 0.0261852 ,\n",
       "        0.01010267]),\n",
       " 'std_test_score': array([0.00364932, 0.00345706, 0.0033445 , 0.00332496, 0.00294774,\n",
       "        0.00334714]),\n",
       " 'std_train_score': array([0.00039182, 0.00032313, 0.00057661, 0.00058142, 0.00085399,\n",
       "        0.00029775])}"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch4_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.581295 using {'reg_alpha': 1.5, 'reg_lambda': 1}\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1e518398b38>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch4_1.best_score_, gsearch4_1.best_params_))\n",
    "test_means = gsearch4_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch4_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch4_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch4_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch4_1.cv_results_).to_csv('my_preds_reg_alpha_reg_lambda_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "train_scores = np.array(train_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "\n",
    "#log_reg_alpha = [0,0,0,0]\n",
    "#for index in range(len(reg_alpha)):\n",
    "#   log_reg_alpha[index] = math.log10(reg_alpha[index])\n",
    "    \n",
    "for i, value in enumerate(reg_alpha):\n",
    "    pyplot.plot(reg_lambda, -test_scores[i], label= 'reg_alpha:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'reg_alpha' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'reg_alpha_vs_reg_lambda1.png' )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
